From a544c9814547a07c980fece60371f4d623929aee Mon Sep 17 00:00:00 2001 From: Olaf Hering Date: Sat, 16 Jul 2011 09:24:43 +0100 Subject: [PATCH] xentrace: reduce size of extradata in trace_irq_mask() Reduce size of extra_data in to avoid possible crash in trace_var. (XEN) Assertion 'extra_word <= TRACE_EXTRA_MAX' failed at trace.c:687 (XEN) Xen call trace: (XEN) [] __trace_var+0x4d/0x3b8 (XEN) [] trace_irq_mask+0x49/0x4b (XEN) [] __assign_irq_vector+0x241/0x374 (XEN) [] set_desc_affinity+0x5d/0xd4 (XEN) [] set_msi_affinity+0x44/0x1c1 (XEN) [] move_masked_irq+0x9c/0xcd (XEN) [] move_native_irq+0x3e/0x53 (XEN) [] ack_msi_irq+0x2c/0x6e (XEN) [] do_IRQ+0x16f/0x66d Signed-off-by: Olaf Hering Acked-by: George Dunlap --- xen/arch/x86/irq.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c index c89a3c43c2..7c5a8b6404 100644 --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -77,10 +77,14 @@ void unlock_vector_lock(void) static void trace_irq_mask(u32 event, int irq, int vector, cpumask_t *mask) { struct { - int irq, vec; - cpumask_t mask; - } d = { irq, vector, *mask }; - trace_var(event, 1, sizeof(d), (unsigned char *)&d); + unsigned int irq:16, vec:16; + unsigned int mask[6]; + } d; + d.irq = irq; + d.vec = vector; + memset(d.mask, 0, sizeof(d.mask)); + memcpy(d.mask, mask, min(sizeof(d.mask), sizeof(cpumask_t))); + trace_var(event, 1, sizeof(d), &d); } static int __init __bind_irq_vector(int irq, int vector, cpumask_t cpu_mask) -- 2.30.2